
#ifndef SYSTEM_CONFIG_H //确保头文件只被编译一次
#define SYSTEM_CONFIG_H

#include <stdint.h>
#include <string>
#include <vector>
#include <map>

using namespace std;

namespace equip_system
{
/*
        调试模式开关
    */
// #define EQUIP_DEBUG

//-----------------------------------------------------------
//
// 设备类型定义
//
//
/*
        印刷机系列
        WY300
        WY360
        WY450
        WY500
    */
#define EQUIPMENT_PRINTER

/*
        填孔机系列
        TY300
        TY360
    */
//#define EQUIPMENT_FILLING

/*
        整平/压平机系列
    */
//#define EQUIPMENT_FLATTENING

#define IN
#define OUT

/*
        IP配置
    */
struct IP_CELL
{
    char ip[16];
    unsigned int port;

    //
    IP_CELL() : ip("127.0.0.1"), port(502)
    {
    }

    //
    IP_CELL(char *_ip, unsigned int _port) : port(_port)
    {
        if (_ip)
            memcpy(_ip, ip, sizeof(char) * 16);
    }
};

typedef struct
{
    IP_CELL ip_plc;
    IP_CELL ip_dataserver;
} ipconfig;

/*

 */
// 设备属性项（list 数组中的元素）
struct EquipProperty
{
    std::string type;          // 数据类型（float/uint16_t等）
    std::vector<int> addr;     // 地址（支持单个值或数组，如[76,78,80]）
    std::string name_cn;       // 中文名称（原JSON可能存在拼写错误：ame_cn应为name_cn）
    std::string name_en;       // 英文名称（如"offset_x"）
    int len;                   // 长度
    std::string reg;           // 寄存器类型（如"03"）
    std::vector<string> value; //
    std::string comment;       // 注释
};

// 单台设备配置（如equip_print/equip_fill）
struct NodeData_Config
{
    std::string equip;               // 设备类型
    std::string type;                // PLC类型（如"ORMON_CP1H"）
    std::string id;                  //
    std::string Name;                //
    std::vector<EquipProperty> list; // 属性列表
};

// 配置结构体
struct MqttConfig
{
    std::string broker_ip; // 服务器IP
    int broker_port;       // 端口（默认1883）
    std::string protocol;
    std::string client_id; // 客户端ID
    std::string username;  // 用户名（可选）
    std::string password;  // 密码（可选）
    std::string topic;     // 主题
    int cycle_delay;       // 自动发送频率
    int retry_delay;       // 断开重连的延时
    int keep_alive;        // 心跳间隔（秒，默认60）
    int timeout;           // 连接超时（秒，默认5）
};
struct ModbusConfig
{
    std::string server_ip;
    int server_port;
    int slave_id;
    int timeout;
    int cycle_delay; // 自动采集间隔
    int retry_delay; // 断开重连的延时
    int retry_count;
};
struct FaultConfig
{
    std::string open;      // 是否打开=yes/YES/Yes/no/NO/No
    std::string broker_ip; // 服务器IP
    int broker_port;       // 端口（默认1883）
    std::string protocol;
    std::string client_id; // 客户端ID
    std::string username;  // 用户名（可选）
    std::string password;  // 密码（可选）
    std::string topic;     // 主题
    std::string message;   // 
    int cycle_delay;       // 自动发送频率
    int retry_delay;       // 断开重连的延时
    int keep_alive;        // 心跳间隔（秒，默认60）
    int timeout;           // 连接超时（秒，默认5）
};
}; // namespace equip_system

#endif //SYSTEM_CONFIG_H